package com.weayer.request;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.weayer.constraints.DateTimeRange;
import com.weayer.constraints.DicCheck;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Positive;
import java.time.LocalDateTime;

/**
 * @description: 订单请求
 * @author: Weayer
 **/
@Data
public class OrderRequest {
    @Positive(message = "订单号必须为正数")
    private Long orderId;           // 订单id

    @NotNull(message = "乘客ID不能为空")
    @Positive(message = "乘客ID必须为正数")
    private Long passengerId;       // 乘客id

    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^1[3,4,5,6,7,8,9]\\d{9}$", message = "请填写正确的手机号")
    private String passengerPhone;  // 乘客手机号

    @NotBlank(message = "城市码不能为空")
    @Pattern(regexp = "^\\d{6}$",message = "请输入正确的城市码")
    private String address;     // 行政区域

    @NotNull(message = "出发时间不能为空")
    @DateTimeRange(judge = DateTimeRange.IS_BEFORE, message = "出发时间有误")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime departTime;   // 出发时间

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime orderTime;    // 下单时间

    @NotBlank(message = "出发地址不能为空")
    private String departure;           // 出发地址

    @NotBlank(message = "出发经度不能为空")
    @Pattern(regexp = "^[\\-\\+]?(0?\\d{1,2}\\.\\d{1,6}|1[0-7]\\d{1}\\.\\d{1,6}|180\\.0{1,6})$",message = "请输入正确的起点经度")
    private String depLongitude;        // 出发地经度

    @NotBlank(message = "出发纬度不能为空")
    @Pattern(regexp = "^[\\-\\+]?([0-8]?\\d{1}\\.\\d{1,6}|90\\.0{1,6})$",message = "请输入正确的起点纬度")
    private String depLatitude;         // 出发地纬度

    @NotBlank(message = "目的地不能为空")
    private String destination;          // 目的地地址

    @NotBlank(message = "目的地经度不能为空")
    @Pattern(regexp = "^[\\-\\+]?(0?\\d{1,2}\\.\\d{1,6}|1[0-7]\\d{1}\\.\\d{1,6}|180\\.0{1,6})$",message = "请输入正确的目的地经度")
    private String destLongitude;        // 目的地经度

    @NotBlank(message = "目的地纬度不能为空")
    @Pattern(regexp = "^[\\-\\+]?([0-8]?\\d{1}\\.\\d{1,6}|90\\.0{1,6})$",message = "请输入正确的目的地纬度")
    private String destLatitude;         // 目的地纬度
    // 司机去接乘客出发时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime toPickUpPassengerTime;

    // 去接乘客时，司机的经度
    private String toPickUpPassengerLongitude;

    // 去接乘客时，司机的纬度
    private String toPickUpPassengerLatitude;

    // 去接乘客时，司机的地点
    private String toPickUpPassengerAddress;

    // 接到乘客，乘客上车经度
    private String pickUpPassengerLongitude;

    // 接到乘客，乘客上车纬度
    private String pickUpPassengerLatitude;

    // 乘客下车经度
    private String passengerGetoffLongitude;

    // 乘客下车纬度
    private String passengerGetoffLatitude;

    //坐标加密标识
    //1:GCJ-02测绘局标准
    //2:WGS84 GPS标准
    //3:BD-09 百度标准
    //4:CGCS2000 北斗标准
    //0:其他
    @NotNull(message = "坐标加密标识不能为空")
    @DicCheck(dicValue = {"1","2","3","4","0"},message = "坐标加密标识不正确")
    private Integer encrypt;

    @Pattern(regexp = "^\\d{6}\\$\\d{1}$",message = "运价类型编码不正确")
    private String fareType;            // 运价类型编码

    @NotNull(message = "计价版本号不能为空")
    @Positive(message = "计价版本号不正确")
    private Integer fareVersion;         // 运价版本号

//    @NotBlank(message = "设备唯一码不能为空")
//    private String deviceCode;          // 请求设备号

    @NotNull(message = "车辆类型不能为空")
    @DicCheck(dicValue = {"1","2"},message = "请填写正确的车辆类型")
    private String vehicleType;     // 车辆类型
}
